namespace SpoolFileLibrary.Reader.Winspool {
    public interface IDeviceMode {
        /// <summary>
        /// Gets the name of the device. 
        /// </summary>
        /// <value>The name of the device.</value>
        string DeviceName { get; }

        /// <summary>
        /// Gets the spec version. The version of initialization data specification on which the DEVMODE structure is based. 
        /// This value SHOULD be 0x0401.
        /// </summary>
        /// <value>The spec version.</value>
        short SpecVersion { get; }

        /// <summary>
        /// Gets the driver version. For printers, an optional, implementation-defined version of the printer driver.
        /// </summary>
        /// <value>The driver version.</value>
        short DriverVersion { get; }

        /// <summary>
        /// The size in bytes of the DEVMODE structure. The size MUST NOT include the length of any private, 
        /// printer driver-specific data that might follow the DEVMODE structure's public fields.
        /// </summary>
        /// <value>The size.</value>
        short Size { get; }

        /// <summary>
        /// The size in bytes of the private printer driver data that follows this structure.
        /// </summary>
        /// <value>The driver extra.</value>
        short DriverExtra { get; }

        /// <summary>
        /// Gets the fields. A bitfield that specifies the fields of the DEVMODE structure that have been initialized. 
        /// If a bit is set, the corresponding field MUST be initialized and MUST be processed on receipt. 
        /// If a bit is not set, the value of the corresponding field SHOULD be set to zero and MUST be ignored on receipt.
        /// </summary>
        /// <value>The fields.</value>
        Fields Fields { get; }

        Orientation Orientation { get; }
        PaperSize PaperSize { get; }
        short PaperLength { get; }
        short PaperWidth { get; }
        short Scale { get; }
        short Copies { get; }
        PaperSource DefaultSource { get; }
        PrintQuality PrintQuality { get; }
        bool Color { get; }
        Duplex Duplex { get; }
        short YResolution { get; }
        TrueTypeOption TTOption { get; }
        bool Collate { get; }
        string FormName { get; }
        NupPrinting Nup { get; }
        ImageColorManagementMethod ImageColorManagementMethod { get; }
        ImageColorManagementIndent ImageColorManagementIndent { get; }
        MediaType MediaType { get; }
        DitherType DitherType { get; }
    }
}